package br.skytef.stmanager.beans;

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import br.skytef.stmanager.daos.ClienteContatoDao;
import br.skytef.stmanager.daos.MotivoSuporteDao;
import br.skytef.stmanager.daos.SubErroDao;
import br.skytef.stmanager.daos.TarefaDAO;
import br.skytef.stmanager.daos.UtcDAO;
import br.skytef.stmanager.entities.ClienteContatoEntity;
import br.skytef.stmanager.entities.ClienteEntity;
import br.skytef.stmanager.entities.HistoricoTarefaEntity;
import br.skytef.stmanager.entities.MotivoSuporteEntity;
import br.skytef.stmanager.entities.SubErroEntity;
import br.skytef.stmanager.entities.TarefaEntity;
import br.skytef.stmanager.entities.UsuarioEntity;
import br.skytef.stmanager.entities.UtcEntity;
import br.skytef.stmanager.utils.Consulta;
import br.skytef.stmanager.utils.Data;
@ManagedBean(name= "HistoricoTarefaBean")
@SessionScoped

public class HistoricoTarefaBean {

	public List<MotivoSuporteEntity> getMotivoSuporte() {return motivoSuporte;}
	public void setMotivoSuporte(List<MotivoSuporteEntity> motivoSuporte) {this.motivoSuporte = motivoSuporte;}
	private List<MotivoSuporteEntity> motivoSuporte;

	public static TarefaEntity getTarefa() {return tarefa;}
	public static void setTarefa(TarefaEntity tarefa) {HistoricoTarefaBean.tarefa = tarefa;}
	private static TarefaEntity tarefa;

	public UtcEntity getUtc() {return utc;}
	public void setUtc(UtcEntity utc) {this.utc = utc;}
	private UtcEntity utc;

	public List<ClienteContatoEntity> getContatos() {return contatos;}
	public void setContatos(List<ClienteContatoEntity> contatos) {HistoricoTarefaBean.contatos = contatos;}
	private static List <ClienteContatoEntity> contatos;

	public ClienteEntity getCliente() {return cliente;}
	public void setCliente(ClienteEntity cliente) {HistoricoTarefaBean.cliente = cliente;}
	private static ClienteEntity cliente;

	public static String getCadContato() {return cadContato;}
	public static void setCadContato(String cadContato) {HistoricoTarefaBean.cadContato = cadContato;}
	private static String cadContato;

	public HistoricoTarefaEntity getHistorico() {return historico;}
	public void setHistorico(HistoricoTarefaEntity historico) {this.historico = historico;}
	private HistoricoTarefaEntity historico;

	public String getVisible() {return visible;}
	public void setVisible(String visible) {this.visible = visible;}
	private String visible = "false";

	public String getButton() {return button;}
	public void setButton(String button) {this.button = button;}
	private String button = "true";

	public String getMotivo() {return motivo;}
	public void setMotivo(String motivo) {this.motivo = motivo;}
	private String motivo;

	public String getError() {return error;}
	public void setError(String error) {this.error = error;}
	private String error ;
	
	private HttpSession session;
	private UsuarioEntity usuario;

	public HistoricoTarefaBean(){
		setHistorico(new HistoricoTarefaEntity());
		getListMotivoSuporteEntities();
		FacesContext ctx = FacesContext.getCurrentInstance();
		session = (HttpSession) ctx.getExternalContext().getSession(false);
		usuario = (UsuarioEntity)session.getAttribute("usuario");
		if(usuario == null)
			new LoginBean().encerraSessao();
	
	}

	public static void carregar(TarefaEntity registroTarefa){
		tarefa = registroTarefa;

	}

	public void reabrirTarefa(){
		if (!tarefa.getStatus().equals("C")){
			visible = "true";
			button = "false";
			getListContatoEntities();

		}else{
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"Situação não permite reabertura de tarefa.",""));
		}
	}

	public List<MotivoSuporteEntity> getListMotivoSuporteEntities(){
		List <MotivoSuporteEntity> motivoSuporte;
		motivoSuporte = new MotivoSuporteDao().listar();
		return motivoSuporte;
	}

	public List <SubErroEntity> getListSubErroEntities(){
		List <SubErroEntity> suberro;
		suberro = new SubErroDao().listar();
		return suberro;
	}

	public void cadContato() {	
		cadContato = (String.valueOf(tarefa.getCnpj()));
	}

	public static List <ClienteContatoEntity> getListContatoEntities(){
		cliente = new Consulta().cliente(String.valueOf(tarefa.getCnpj()));
		contatos =  new ClienteContatoDao().listarContato(cliente.getIdCliente());
		return contatos;
	}

	public void cadastrarMotivo(){
		FacesContext facesContext = FacesContext.getCurrentInstance();

		if (new MotivoSuporteDao().inserir(motivo)){
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Cadastro realizado com sucesso", ""));

		}else{
			error = MotivoSuporteDao.getErro();
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Não foi possível realizar o cadastro:", error));
		}
	}

	public void salvarHistorico() throws SQLException, IOException{
		montarDescricao();
		FacesContext facesContext = FacesContext.getCurrentInstance();
		if(new TarefaDAO().atualizar(historico))
			utc = new UtcEntity (tarefa.getId(),cliente.getIdCliente(),usuario.getId(),null);

		if(TarefaDAO.getErro() == null){
			new UtcDAO().atualizarUtc(utc);
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Registro realizado com sucesso", ""));
			
			DashboardBean.pageProtocoloReabertura();
			refreshPagina();

		}else{
			facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Não foi possível realizar o registro", ""));
		}
	}

	public void montarDescricao(){
		String descricao = "Descrição abertura: " + tarefa.getDescricao();
		descricao+=" Responsável abertura: " + historico.getIdUsuario();
		descricao+=" Data de abertura: " + tarefa.getDataInclusao();
		descricao+= "*****Editado*****"; 
		descricao+= "\n";
		descricao+=	" Data de alteracao: " + new Data().DtTime() + " Responsável:  " + usuario.getNome();
		descricao+= "\n";
		descricao+= " Descrição: " + historico.getDescricao();

		historico.setDescricao(descricao);
		historico = new HistoricoTarefaEntity(historico.getDescricao(),historico.getStatus(),historico.getTipoCliente(),historico.getTipoSuporte(),historico.getForma(), new Data().DtTime(),historico.getMotivoSuporte_id(),historico.getContato_id(),historico.getSuberro_id(),tarefa.getId());

	}

	public String refreshPagina(){
		new ConsultaTarefaBean().refreshPagina();
		setHistorico(new HistoricoTarefaEntity());
		setContatos(null);
		setMotivo(null);
		setUtc(new UtcEntity());
		visible = "false";
		button = "true";
		return null;	
	}
}


